package br.com.pattern.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import br.com.pattern.model.Vendedor;

public class VendedorDao extends GenericDao{

	protected VendedorDao(ConnectionDataBaseGeneric connectionDataBaseGeneric) {
		super(connectionDataBaseGeneric);
	}
	
	public void salvar(Vendedor vendedor){
		String insert = "INSERT INTO vendedores(cpf, nome, carteira_trabalho, telefone, data_admissao) VALUES(?,?,?,?,?)";

		save(insert, vendedor.getCpf(), vendedor.getNome() ,vendedor.getCarteiraDeTrabalho(), vendedor.getTelefone(), new java.sql.Date(vendedor.getDataDeAdmissao().getTimeInMillis()));
	}

	public void alterar(Vendedor vendedor){

		String update = "UPDATE vendedor SET cpf=?, nome=?, carteira_trabalho=?, telefone=?, data_admissao=? WHERE id=?";

		update(update, vendedor.getCpf(), vendedor.getNome(), vendedor.getCarteiraDeTrabalho(), vendedor.getTelefone(), new java.sql.Date(vendedor.getDataDeAdmissao().getTimeInMillis()), vendedor.getId());
	}

	public void excluir(Vendedor vendedor){

		String delete = "DELETE FROM vendedores WHERE id = ?";

		delete(delete, vendedor.getId());
	}

	public List<Vendedor> listaVendedores(){

		List<Vendedor> lista = new ArrayList<Vendedor>();

		String select = "SELECT * FROM vendedores";

		try{
			
			PreparedStatement pstmt = getConnection().prepareStatement(select);
			ResultSet rs = pstmt.executeQuery();

			while(rs.next()){
				Vendedor vendedor = new Vendedor();

				vendedor.setId(rs.getLong("id"));
				vendedor.setCpf(rs.getString("cpf"));
				vendedor.setNome(rs.getString("nome"));
				vendedor.setCarteiraDeTrabalho(rs.getString("carteira_trabalho"));
				vendedor.setTelefone(rs.getString("telefone"));
				
				Calendar dataAdmissao = Calendar.getInstance();
				dataAdmissao.setTime(rs.getDate("data_admissao"));				
				vendedor.setDataDeAdmissao(dataAdmissao);		

				lista.add(vendedor);
			}

			rs.close();
			pstmt.close();
			
		}catch(SQLException e){
			e.printStackTrace();
		}

		return lista;
	}
	
	public Vendedor findByNome(String nome) {

		String select = "SELECT * FROM vendedores WHERE nome = ?";

		Vendedor vendedor = null;

		try{
			
			PreparedStatement stmt = getConnection().prepareStatement(select);		
			stmt.setString(1, nome);

			ResultSet rs = stmt.executeQuery();		 

			while (rs.next()) {		
				vendedor = new Vendedor();

				vendedor.setId(rs.getLong("id"));
				vendedor.setCpf(rs.getString("cpf"));
				vendedor.setNome(rs.getString("nome"));
				vendedor.setCarteiraDeTrabalho(rs.getString("carteira_trabalho"));
				vendedor.setTelefone(rs.getString("telefone"));
				
				Calendar dataAdmissao = Calendar.getInstance();
				dataAdmissao.setTime(rs.getDate("data_admissao"));				
				vendedor.setDataDeAdmissao(dataAdmissao);
			}		 

			rs.close();		
			stmt.close();
			
		}catch(SQLException e){
			e.printStackTrace();
		}

		return vendedor;

	}

}
